package com.sy.olddriver.utils;

import com.alibaba.fastjson.JSON;
import com.sy.olddriver.exception.OldDriverException;
import com.sy.olddriver.filter.ServletHolder;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 请求参数相关的工具方法
 *
 * @author Administrator
 */
public class ParamUtils {
    private ParamUtils() {

    }

    /**
     * 根据请求参数的名字，获取请求参数的值
     *
     * @param paramName 请求参数名
     * @return 请求参数值
     */
    public static String getParam(String paramName) {
        HttpServletRequest req = ServletHolder.getCurRequest();
        return req.getParameter(paramName);
    }


    /**
     * 将请求对象中的parameterMap转换为一个Bean对象
     *
     * @param clazz 最终要得到的Bean对象的类型
     * @param <T>   泛型参数
     * @return 最终要得到的Bean对象
     */
    public static <T> T paramMap2Bean(Class<T> clazz) {
        HttpServletRequest req = ServletHolder.getCurRequest();
        Map<String, String[]> parameterMap = req.getParameterMap();
        Object object = null;
        try {
            object = clazz.newInstance();
            BeanUtils.populate(object, parameterMap);
        } catch (Exception e) {
            e.printStackTrace();
            throw new OldDriverException("参数有误");
        }
        return (T) object;
    }

    /**
     * 将前端传递过来的JSON数组对应的字符串转换为Java中的List集合
     *
     * @param clazz 最终集合的元素泛型
     * @return 最终得到的集合对象
     */
    public static <T> List<T> parseJsonArr2List(Class<T> clazz) {
        HttpServletRequest req = ServletHolder.getCurRequest();
        String jsonStr = "";
        for (Map.Entry<String, String[]> paramMap : req.getParameterMap().entrySet()) {
            jsonStr = paramMap.getKey();
        }
        List<T> list = JSON.parseArray(jsonStr, clazz);
        return list;
    }
}
